"""使用dict和set"""
# dict全称dictionary，在其他语言中也称为map，使用键-值（key-value）存储，具有极快的查找速度。
d = {'zhangsan': 96, 'lisi': 99, 'wangwu': 80}
print(d['lisi'])
# 通过in判断key是否存在
print('wangermazi' in d)
print(d.get('tuomasi'))
print(d.get('tuomasi', -1))

# 要删除一个key，用pop(key)方法，对应的value也会从dict中删除
d.pop('zhangsan')
print(d)

# 需要牢记的第一条就是dict的key必须是不可变对象。
# 这是因为dict根据key来计算value的存储位置，如果每次计算相同的key得出的结果不同，那dict内部就完全混乱了。
# key = [1, 2, 3]
# d[key] = 'a list'
# print(d)

# 在set中，没有重复的key, 要创建一个set，需要提供一个list作为输入集合
s = set([1, 2, 3])
print(s)
# 重复元素在set中自动被过滤：
s = set([1, 1, 2, 2, 3, 3])
print(s)
# 通过add(key)方法可以添加元素到set中，可以重复添加，但不会有效果
s.add(4)
s.add(3)
print(s)
# 通过remove(key)方法可以删除元素
s.remove(1)
print(s)
# set可以看成数学意义上的无序和无重复元素的集合，因此，两个set可以做数学意义上的交集、并集等操作：
s1 = set([1, 2,3])
s2 = set([2, 3, 4])
print(s1 & s2)
print(s1 | s2)
# set的原理和dict一样，所以，同样不可以放入可变对象，因为无法判断两个可变对象是否相等，也就无法保证set内部“不会有重复元素”。
# 可变对象，比如list
a = ['c', 'b', 'a']
a.sort()
print(a)
# 对于不可变对象，比如str
# 虽然字符串有个replace()方法，也确实变出了'Abc'，但变量a最后仍是'abc'
a = 'abc'
print(a.replace('a', 'A'))
print(a)



